การจัดการหน่วยความจำด้วยตนเองผ่าน new และ delete สร้างความสัมพันธ์ที่เปราะบาง "ข้อตกลงความรับผิดชอบ". นักพัฒนาต้องคาดการณ์เส้นทางการประมวลผลทุกจุดอย่างแม่นยำ รวมถึงการคืนค่าแบบเร็วและข้อผิดพลาด (exceptions) เพื่อให้มั่นใจว่าทรัพยากรจะถูกปล่อยคืน แนวทางนี้มีแนวโน้มเกิดความล้มเหลวในระดับระบบ
ความล้มเหลวในระดับระบบ
- ไซโคลของความรั่วไหล: ในตรรกะที่ซับซ้อน (เช่น if-else, switches) การไม่จับคู่การใช้งานแต่ละครั้งของ
newกับdeleteทำให้ประสิทธิภาพของระบบลดลงเรื่อยๆ - ข้อผิดพลาดจากชี้ไปยังหน่วยความจำที่ไม่ถูกต้อง: ข้อผิดพลาดเช่น Dangling Pointers (การเข้าถึงหน่วยความจำหลังการลบ) หรือ Double Frees ก่อให้เกิดพฤติกรรมที่ไม่แน่นอนและช่องโหว่ด้านความปลอดภัย
- ความปลอดภัยเมื่อเกิดข้อผิดพลาด (Exception): หากเกิดข้อผิดพลาดระหว่างการจัดสรรและการคืนหน่วยความจำ คำสั่ง
deleteจะถูกละเลยทั้งหมด
การเปลี่ยนแปลงของ การพัฒนา
C++11/14 ได้ปรับปรุงหัวข้อ <memory> เพื่อเลิกใช้ "ชี้ตรง" (naked pointers) และเปลี่ยนมาใช้โมเดลการเป็นเจ้าของอัตโนมัติที่บังคับความปลอดภัยไว้ที่ระดับคอมไพล์เลอร์
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>